import com.wn.domain.Person;
import org.junit.jupiter.api.Test;

import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.function.BinaryOperator;

/**
 * @author yellow Docter
 * @date 2022 -10-28
 * @desc  中止操作
 *  reduce(T iden, BinaryOperator b)		可以将流中元素反复结合起来，得到一个值。返回 T
 * reduce(BinaryOperator b)   		 		可以将流中元素反复结合起来，得到一个值。返回 Optional
 */
//@SuppressWarnings("all")    //压制警告的注解
public class Demo05 {

    List<Person> ps = Arrays.asList(
            new Person("马云", 48, 2000d),
            new Person("马化腾", 50, 3000d),
            new Person("雷军", 46, 4000d),
            new Person("刘强东", 47, 5000d),
            new Person("张朝阳", 50, 6000d),
            new Person("张朝阳", 50, 6000d),
            new Person("张一鸣", 50, 7000d),
            new Person("张一鸣", 50, 7000d)
    );

    @Test
    public void demo01(){

        Optional<Double> max = ps.stream()  //转成流
//                .map(p->p.getSalary()) //方法的映射
                .map(Person::getSalary)       //类名::方法
                .reduce((o1,o2)->o1 + o2);         //方法的引用  类名::静态方法名称;

        System.out.println(max.get());

        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        Integer reduce = list.stream().reduce(10, (x, y) -> x + y);
        System.out.println(reduce);
    }

}
